/*
 * Copyright 2023-2025, Haiku, Inc. All rights reserved.
 * Distributed under the terms of the MIT License.
 *
 * Authors:
 *   Haiku Development Team
 */

.text
.align 3

// EFI应用程序入口点
.global _start
_start:
    // 保存参数
    // a0 = EFI句柄
    // a1 = EFI系统表指针
    move    s0, a0
    move    s1, a1

    // 设置栈指针
    // 栈已经由EFI固件设置好
    // 我们只需要确保它是16字节对齐的
    andi    t0, sp, 15
    sub     sp, sp, t0

    // 调用C函数efi_main
    move    a0, s0
    move    a1, s1
    bl      efi_main

    // 返回到EFI固件
    jr      ra

// 模拟GNU-EFI的数据结构
.data

// EFI应用程序的PE/COFF头部需要这些符号
.global ImageBase
ImageBase:
    .quad   0

.global _edata
_edata:
    .quad   0

.global _end
_end:
    .quad   0

.global __bss_start
__bss_start:
    .quad   0

.end